AWS入門ブログリレー2024〜 Amazon Athena 編〜
当エントリは弊社AWS事業本部による『AWS 入門ブログリレー 2024』に部外者ですが参戦している14日目のエントリです。
このブログリレーの企画は、普段 AWS サービスについて最新のネタ・深い/細かいテーマを主に書き連ねてきたメンバーの手によって、 今一度初心に返って、基本的な部分を見つめ直してみよう、解説してみようというコンセプトが含まれています。
AWS をこれから学ぼう!という方にとっては文字通りの入門記事として、またすでに AWS を活用されている方にとっても AWS サービスの再発見や 2024 年のサービスアップデートのキャッチアップの場となればと考えておりますので、ぜひ最後までお付合い頂ければ幸いです。
では、さっそくいってみましょう。今回のテーマは『Amazon Athena』です。
Amazon Athena とは
Amazon Athenaは、AWSが提供するサーバーレスのクエリサービスです。従来のデータウェアハウスソリューションとは異なり、Athenaではデータの保存場所であるデータレイクに対してSQL形式のクエリを実行することができます。従来からあるオンデマンドキャパシティのAthenaは、サーバの管理やインフラの構成などの手間をかけずに、瞬時にデータ分析を始めることが可能です。料金も実際にクエリを実行したデータ量に基づいているため、コスト効率が高く、大量のデータを扱う企業にとって有効なサービスです。
Amazon Athenaは、データエンジニアがデータ分析に用いるだけでなく、インフラエンジニアがALBやCloudTrailなどのログを検索、可視化する際にも有用なクエリエンジンです!
Athenaのデータストア「データレイク」
Athenaのデータストアとなる、「データレイク」とその「データフォーマット」について解説します。
データレイクとは
データレイクは、さまざまな形式や構造のデータを保存しておく大規模な保管場所のことを表し、AWSクラウドでは主にS3に保存することから、S3データレイクと呼ばれることもあります。企業は、構造化されたデータだけでなく、半構造化データ、非構造化データも含めて、すべてのデータを保存・利用できます。データレイクを活用することで、データの種類を選ばずに収集・保存でき、将来的な分析の幅が広がります。また、データレイクではデータを加工せずに格納できるため、データ準備にかかるコストを抑えることができます。
Amazon Athenaは、データレイクとの組み合わせて本領を発揮する事ができるのです。
データフォーマット
データレイクにどのようなフォーマットでデータを保存するかを決めるのが、データフォーマットになります。データフォーマットには、HIVE
とICEBERG
があり、それぞれの特徴と違いを理解することは、データ分析の効率化やパフォーマンス向上に繋がります。
HIVE
HIVEは、データ用のフォルダにデータファイルを保存する簡単な方法です。データ分析のためのテーブルフォーマットとして広く利用されています。
HIVEでは、さらにHiveスタイルパーティションといって、データを論理的に分割して保存する方法もあります。いわゆる、「パーティショニング」です。テーブルを複数の小さな部分に分割することで、データ分析のパフォーマンスとスケーラビリティを向上させることができます。
Hiveスタイルパーティションは、ディレクトリ階層を使用してデータを分割します。各ディレクトリは、パーティションキーと値の組み合わせを表します。例えば、テーブルにyear
とmonth
というパーティションキーがあると、以下のディレクトリ階層が作成されます。フィルタ条件に2023年1月を指定すると、そのフォルダをスキャンするだけで済むため、コストとパフォーマンスが改善します。
/market_sales/ /year=2023/ /month=1/ /month=2/ /year=2024/ /month=1/
末端のフォルダの下にデータファイルを保存します。データ形式は、CSV、JSON、Parquet、ORC、正規表現をはじめに、多くをサポートしています。
HIVEの課題は、DMLと呼ばれるデータ操作機能が限定されていることにありました。具体的には、DELETE、UPDATE、MERGEなどのDMLをサポートしていないため、主な用途としてデータ参照に利用されることがほとんどでした。さらに、カラムのデータ型変更や追加・削除にも対応できないため、データ形式によっては、変更に対応するためにS3データレイク上のファイルを事前に変換する必要がありました。
ICEBERG(Apache Iceberg)
ICEBERGは、HIVEの課題を克服するために開発された大規模なデータセットの効率的な分析を実現するテーブルフォーマットです。ACIDトランザクション、スキーマの変更、パーティショニングの最適化など、一般的なデータウェアハウスが備えている機能を提供することで、データの整合性とクエリのパフォーマンスが向上します。Athenaでのサポートにより、これまで以上にサーバレスな環境でIcebergテーブルを簡単にクエリできるようになります。
具体的なテーブル作成やデータの操作については、以下のブログを参照してください。
ICEBERGは、個人的にもイチオシのデータフォーマットであり、AWS主催のオンラインカンファレンス、ちょっぴり DiveDeep する AWS の時間にて「Amazon Athena (Iceberg) x dbt ではじめるデータ分析!」というテーマにて登壇しました。セッション動画と資料が公開されていますのご覧いただけたら幸いです。
ICEBERG は、Parquet 形式のデータファイルに加えて、メタデータファイルも保持します。メタデータファイルには、テーブルスキーマ、パーティショニング情報、トランザクション履歴などの情報が含まれます。利用者は、どのようなファイル構成であるかを意識する必要はありません。
HIVEとICEBERGの比較
項目 | HIVE | ICEBERG(Apache Iceberg) | 補足 |
---|---|---|---|
データフォーマット | データ用のフォルダにデータファイルを保存する | オープンソース技術に基づいたテーブルフォーマット | |
ACIDトランザクション | サポートしていない | サポートしている | データの整合性を保証 |
スキーマ変更 | スキーマ変更だけでなく、データファイルの変更が必要 | DDLのみで変更できる | 開発の柔軟性を向上 |
パフォーマンス | 単純な用途では良い | オーバーヘッドは生じるが、概ね高い | データ分析の効率化 |
データのタイムトラベル機能 | なし | あり | 過去のデータバージョンへのアクセス |
コスト | 比較的低い | 更新履歴のストレージコストが発生する | 予算との兼ね合い |
適したユースケース | 既存環境との統合、コスト重視 | ACIDトランザクション、スキーマ変更、パフォーマンス重視 | データ分析の要件に基づいて選択 |
データストアとしてのデータレイクとデータウェアハウスとの違い
大量のデータを分析する場合、まず思い浮かぶのはデータウェアハウス(DWH)です。ここでは、両者の違いをざっくり解説します。
データウェアハウス(DWH)は構造化されたデータの分析に特化している一方、データレイクは構造化・非構造化問わずあらゆるデータを格納できるという違いがあります。
データレイク | データウェアハウス(DWH) | |
---|---|---|
データ形式 | 構造化、非構造化を問わず | 主に構造化データ |
データ加工 | 加工不要 | 事前に加工が必要 |
スキーマ | スキーマオンリード | スキーマオンライト |
用途 | 探索的分析、機械学習など | 定型分析、レポーティングなど |
スケーリング | 容易 | 難しい |
コスト | 低コスト | 高コスト |
データレイクとデータウェアハウス(DWH)は、データの形式、加工の有無、スキーマの扱い方、用途、スケーリングのしやすさ、コストなどの点で大きく異なります。データレイクは、様々な形式のデータを加工せずに格納でき、探索的な分析や機械学習などに適しています。一方、データウェアハウスは、主に構造化データを扱い、定型的な分析やレポーティングなどに適しています。
データレイクとしてテーブルフォーマットHIVEを用いる場合と、データウェアハウス(DWH)に限りなく近い用途でテーブルフォーマットICEBERGを用いる場合がある。Amazon Athenaは、これらの2つのテーブルフォーマットのデータをシームレスにブレンドできるのが大きな特長です。
データウェアハウス(DWH)について、もう少し知りたい方は以下の動画をご覧ください。
Amazon Athenaのクエリエンジン
Amazon Athena は、2 つの異なるエンジンを使用できます。ワークグループごとにエンジンやバージョンを設定可能で、クエリのパフォーマンスやコストに応じてエンジンやバージョンを変更可能です。
Apache Trino(Athena SQL)
Apache Trinoは、元々はFacebookによって開発されたPrestoという分散SQLクエリエンジンをベースに、2020年に独立したプロジェクトです。Amazon Athenaは、Trinoをベースに独自に開発されたクエリエンジンを使用しており、Prestoから進化した多くの機能を利用できます。
- Athena エンジンバージョン3 で使用されるオープンソースの分散 SQL プロジェクト
- オンデマンドキャパシティ(後述)は、スキャンしたデータソースのサイズに応じた課金で、コストがわかりやすい
- アイコンがかわいい(これ重要)
AthenaからTrinoを使ってクエリを実行したい場合は、クエリエディタを開いてSQLを入力し、実行するだけです。もちろん、JDBCドライバやODBCドライバもAWSから提供されており、組み込みアプリケーションに活用していただくことも可能です。
オンデマンドキャパシティとプロビジョニングしたキャパシティの違い
オンデマンドキャパシティはサーバーレスアーキテクチャで、自動的にスケーリングされ、初期費用がかからず、スキャンしたデータサイズに応じて料金を支払います。
一方、プロビジョニングしたキャパシティはクラスターベースのアーキテクチャで、専用のリソースを確保でき、高いパフォーマンスが期待できますが、長期的なコストが高くなる可能性があります。
項目 | オンデマンドキャパシティ | プロビジョニングしたキャパシティ |
---|---|---|
事前計画 | 不要 | 必要 |
支払い | データファイルをスキャンしたサイズ | プロビジョニングしたキャパシティ |
ワークロード変動 | 対応しやすい | 対応しにくい |
突発的なクエリ | 対応しやすい | 余分なキャパシティが必要 |
料金 | 変動 | 固定 |
クエリ実行時間 | 長くなる場合がある | 短縮できる |
パフォーマンス | 変動 | 安定 |
ワークロードが変動したり、突発的なクエリが発生する可能性がある場合は、オンデマンドキャパシティ(デフォルト)が向いており、ワークロードが予測可能で安定する必要がある場合は、プロビジョニングしたキャパシティを選択します。コストとパフォーマンスのバランスを重視する場合は、オンデマンドキャパシティとプロビジョニングしたキャパシティを組み合わせて使用することもできます。
Partition Projection(パーティション射影)
Partition Projection(パーティション射影)は、テーブル定義で指定したパーティションキーのルールやフォーマットからパーティションを計算し、パーティションプルーニングを自動化します。本来、パーティションごとに必要なパーティション設定不要になり、運用負荷が下がるAthenaならではの素晴らしい機能です。
Apache Spark(Athena for Spark)
Apache Sparkは、大規模データ処理のためのオープンソースクラスタコンピューティングフレームワークです。このようにAmazon Athenaは、Apache Sparkの並列分散処理、インメモリ計算、フォールトトレランス、データソースサポート、クエリ最適化などの機能を活用することで、大規模データに対して高速かつ信頼性の高いクエリ実行を実現しています。
- Athena エンジンバージョン 1 で使用されていたオープンソースの分散処理フレームワーク
- ノートブックの利用時間と、実際にクエリを実行したDPUの数に応じた時間課金
- Sparkは、SQL(SparkSQL)だけでなく、プログラミング言語(PySpark、Scala)による分析が可能で、柔軟性が高い
AthenaからSparkを使うには、クエリエディタではなく、ノートブック(Jupyter Notebook)からクエリを実行します。
手順など、詳しくは以下のブログをご覧ください。
様々なデータソースにクエリができるFederated Query
これまで、混乱を避けるために「Athenaは、S3データレイクのデータに対してクエリするサービス」 と解説してきましたが、実は外部のデータソースに対してもクエリを実行することができるFederated Queryという機能があります。Apache Trino用のデータソースコネクタを開発・デプロイすることで様々なデータソースへのクエリが可能になります。
ユースケース
Amazon Athenaのフレキシブルなデータクエリ能力が活かしたユースケースを紹介します。
ユースケース | 説明 | 例 |
---|---|---|
アドホック分析 | データアナリストやビジネスアナリストが、既存のデータについて新たなインサイトを探求するために使用し、SQLスキルを活用してデータを探索し、新たな発見を目指します。 | 販売データの分析 |
IoTデータの蓄積・分析 | IoTデバイスから収集されたセンサーデータなどの大量のデータを、S3データレイクに格納し、Athenaを使ってリアルタイムに分析することができます。 | IoTデータの活用が容易になります |
データパイプライン | S3 に保存されたデータからデータを抽出し、変換し、別のデータストアにロードする | 顧客データを分析し、マーケティングキャンペーンを作成する |
機械学習 | 機械学習モデルのトレーニングに必要なデータの前処理を行い、大規模なデータセットから特定のデータを抽出・変換して、機械学習アルゴリズムが利用できる形式に整形します。 | 機械学習データの前処理 |
セキュリティと監査 | セキュリティログや監査ログなどのデータを分析し、潜在的な脅威や異常を特定する | ネットワークデータを分析し、サイバー攻撃を検知する |
ログ解析 | サーバーのログ、アプリケーションログ、クリックストリームデータなど、さまざまな種類のログデータを分析して、アクセスパターン、セキュリティ侵害の検出やシステムのパフォーマンスを監視します。 | クラウド使用状況を分析し、リソース最適化を行う |
ビジネスインテリジェンス | 販売データ、顧客データ、マーケティングデータなどのデータを分析し、ビジネスパフォーマンスに関する洞察を得る | 顧客満足度を分析し、製品改善に役立てる |
料金
下記の料金は、2024年4月現在、東京リージョンの料金を解説しています。最新情報については、以下をご覧ください。
クエリエンジン:Apache Trinoの場合
オンデマンドキャパシティの料金(SQLクエリ)
- $5/TBスキャンデータ
- バイト数はメガバイト単位で切り上げられ、クエリごとに最小 10 MB が課金
プロビジョニングしたキャパシティの料金
- 0.43USD/時 x DPUの数(最小24)
- アカウントでアクティブな期間 (最低1時間) の料金
- アカウントとリージョンごとに、最大合計 1,000 個の DPU で最大 100 個のキャパシティ予約を作成できます。
クエリエンジン:Apache Sparkの場合
Apache Sparkは、1つドライバと複数のワーカーのノードがあります。ドライバはタスクのスケジュールに基づきワーカーの起動、ワーカーにタスクを送信し、ワーカーは結果をドライバに送信します。
よって、Apache Sparkの場合は、ドライバー DPU 利用時間とワーカー DPU 利用時間の合算になります。
- ドライバー DPU 利用時間は、セッションを開始してから終了するまでの時間
- ワーカー DPU 利用時間は、ワーカーが起動して停止するまで使ったDPUの合算時間
- 0.5USD x (ドライバー DPU 利用時間 + ワーカー DPU 利用時間)
終わりに
Amazon Athenaは、サーバーレスでスケーラブルなクエリサービスです。Athenaを使えば、データレイクに格納された様々な形式のデータに対してSQLクエリを実行でき、ビッグデータ分析を手軽に始めることができます。Athenaは、ログ分析、IoTデータ分析、機械学習、データ探索など、様々なユースケースに活用できます。従量課金制のため、初期費用がかからず、コストを抑えながらビッグデータ分析を行うことができます。
Amazon Athenaは、進化の歩みは止まりません。恐らく、将来的にはIcebergのみならず、Delta LakeやApache Hudiなども段階的にサポートを広げていくのではないかと予想しています。
2023/11時点の最新情報が知りたい人は、下記のセッションをご覧ください。